import 'package:flutter/cupertino.dart';
import 'package:netease_cloud_music_api/netease_cloud_music_api.dart';
import 'package:netease_cloud_music_api/utils/player_request.dart';
import 'package:netease_cloud_music_api/utils/request.dart';

mixin Message {
  /// 通知 - 评论
  /// 说明 : 登录后调用此接口 ,可获取评论
  /// [uid] 用户 的 id, 只能和登录账号的 id 一致
  /// [limit] 返回数量 , 默认为 30
  /// [beforeTime] 分页参数,取上一页最后一个歌单的 updateTime 获取下一页数据
  Future<PlayerRequestResponse> messageComments({required int uid, int? limit, int? beforeTime}) {
    Map<String, dynamic> data = {'beforeTime': beforeTime ?? -1, 'limit': limit ?? 30, 'total': 'true', 'uid': uid};
    return PlayerRequest(
      url: 'https://music.163.com/api/v1/user/comments/$uid',
      data: data,
      options: PlayerRequestOptions(method: PlayerRequestMethod.post, crypto: EncryptType.weapi),
    ).request();
  }

  /// 通知 - @我
  /// 说明 : 登录后调用此接口 ,可获取@我数据
  /// [limit] 返回数量 , 默认为 30
  /// [offset] 偏移数量，用于分页 ,如 :( 页数 -1)*30, 其中 30 为 limit 的值 , 默认为 0
  Future<PlayerRequestResponse> messageForwards({int? limit, int? offset}) {
    Map<String, dynamic> data = {'offset': offset ?? 0, 'limit': limit ?? 30, 'total': 'true'};
    return PlayerRequest(
      url: 'https://music.163.com/api/forwards/get',
      data: data,
      options: PlayerRequestOptions(method: PlayerRequestMethod.post, crypto: EncryptType.weapi),
    ).request();
  }

  /// 通知 - 通知
  /// 说明 : 登录后调用此接口 ,可获取通知
  /// [limit] 返回数量 , 默认为 30
  /// [beforeTime] 返回数据的 time ,默认-1,传入上一次返回结果的 time,将会返回下一页的数据
  Future<PlayerRequestResponse> messageNotices({int? limit, int? beforeTime}) {
    Map<String, dynamic> data = {'time': beforeTime ?? -1, 'limit': limit ?? 30};
    return PlayerRequest(
      url: 'https://music.163.com/api/msg/notices',
      data: data,
      options: PlayerRequestOptions(method: PlayerRequestMethod.post, crypto: EncryptType.weapi),
    ).request();
  }

  /// 通知 - 私信内容
  /// 说明 : 登录后调用此接口 , 可获取私信内容
  /// [uid] 必选参数, 用户 id
  /// [limit] 返回数量 , 默认为 30
  /// [beforeTime] 分页参数,取上一页最后一项的 time 获取下一页数据
  Future<PlayerRequestResponse> messagePrivateHistory({int? limit, int? beforeTime, required int uid}) {
    Map<String, dynamic> data = {'time': beforeTime ?? -1, 'limit': limit ?? 30, 'userId': uid, 'total': true};
    return PlayerRequest(
      url: 'https://music.163.com/api/msg/private/history',
      data: data,
      options: PlayerRequestOptions(method: PlayerRequestMethod.post, crypto: EncryptType.weapi),
    ).request();
  }

  /// 通知 - 私信
  /// 说明 : 登录后调用此接口 ,可获取私信
  /// [limit] 返回数量 , 默认为 30
  /// [offset] 偏移数量，用于分页 ,如 :( 页数 -1)*30, 其中 30 为 limit 的值 , 默认为 0
  Future<PlayerRequestResponse> messagePrivate({int? limit, int? offset}) {
    Map<String, dynamic> data = {'offset': offset ?? 0, 'limit': limit ?? 30};
    return PlayerRequest(
      url: 'https://music.163.com/api/msg/private/users',
      data: data,
      options: PlayerRequestOptions(method: PlayerRequestMethod.post, crypto: EncryptType.weapi),
    ).request();
  }
}
